//牌组中的每张卡牌都对应有一个唯一的整数。你可以按你想要的顺序对这套卡片进行排序。 
//
// 最初，这些卡牌在牌组里是正面朝下的（即，未显示状态）。 
//
// 现在，重复执行以下步骤，直到显示所有卡牌为止： 
//
// 
// 从牌组顶部抽一张牌，显示它，然后将其从牌组中移出。 
// 如果牌组中仍有牌，则将下一张处于牌组顶部的牌放在牌组的底部。 
// 如果仍有未显示的牌，那么返回步骤 1。否则，停止行动。 
// 
//
// 返回能以递增顺序显示卡牌的牌组顺序。 
//
// 答案中的第一张牌被认为处于牌堆顶部。 
//
// 
//
// 示例： 
//
// 输入：[17,13,11,2,3,5,7]
//输出：[2,13,3,11,5,17,7]
//解释：
//我们得到的牌组顺序为 [17,13,11,2,3,5,7]（这个顺序不重要），然后将其重新排序。
//重新排序后，牌组以 [2,13,3,11,5,17,7] 开始，其中 2 位于牌组的顶部。
//我们显示 2，然后将 13 移到底部。牌组现在是 [3,11,5,17,7,13]。
//我们显示 3，并将 11 移到底部。牌组现在是 [5,17,7,13,11]。
//我们显示 5，然后将 17 移到底部。牌组现在是 [7,13,11,17]。
//我们显示 7，并将 13 移到底部。牌组现在是 [11,17,13]。
//我们显示 11，然后将 17 移到底部。牌组现在是 [13,17]。
//我们展示 13，然后将 17 移到底部。牌组现在是 [17]。
//我们显示 17。
//由于所有卡片都是按递增顺序排列显示的，所以答案是正确的。
// 
//
// 
//
// 提示： 
//
// 
// 1 <= A.length <= 1000 
// 1 <= A[i] <= 10^6 
// 对于所有的 i != j，A[i] != A[j] 
// 
//
class Solution {
    fun deckRevealedIncreasing(deck: IntArray): IntArray {
        deck.sortDescending() //降序
        //逆向思维，按后显示的先取回的顺序取回，取回后如果还有待取回的，就把已取回的最后一张拿到最上面
        for (i in 1 .. deck.size - 2) { //第一张和最后一张都不需要 “把已取回的最后一张拿到最上面的操作”
            //整理前i+1项：从显示的牌中拿一张放到最上面若本来手上就有牌，则从最后面那张拿到最前面来
            val tmp = deck[0]
            for (j in 0 until i) {
                deck[j] = deck[j + 1]
            }
            deck[i] = tmp
        }
        deck.reverse()

        return deck
    }
}